#include "user_function.h"
#include "admin_function.h"

/***************************************************
 * 用户功能函数
 *
 * 根据用户的选择，提供相应的功能界面
 * 主要功能包括接收客户端发送的数据类型请求，
 * 并根据请求类型执行相应的查询操作
 *
 * @param user_judge 判断用户是否成功进入功能界面的标志
 * @param listenfd 监听的socket文件描述符
 ***************************************************/
void user_function(int user_judge, int listenfd)
{
	// 判断用户是否成功进入功能界面
	if (user_judge == 1)
	{
		printf("用户进入功能界面成功\n");

		// 初始化接收缓冲区
		char buf[1024] = {0};
		memset(buf, 0, sizeof(buf));
		// 调用功能列表函数，展示可查询的水泵列表
		pump_list(listenfd);

		int ret = 0;
		printf("等待客户端发送中---\n");
		ret = recv(listenfd, buf, 1024, 0);
		if (ret < 0)
		{
			perror("recv");
			return;
		}
		if (ret == 0)
		{
			printf("用户退出功能界面\n");
			return;
		}

		// 输出接收到的数据大小和原始数据
		printf("本次接收的字节大小是：%d\n", ret);
		printf("刚收到并未解析的数据：%s\n", buf);

		// 解析接收到的JSON数据
		cJSON *json = NULL;
		json = cJSON_Parse(buf);
		cJSON *node = NULL;

		node = cJSON_GetObjectItem(json, "data_type");
		if (node == NULL)
		{
			printf("小type错误，为空\n");
			exit(-1);
		}

		// 判断数据类型，执行相应的查询操作
		if (node->type == cJSON_Number)
		{
			// 查询最新数据
			if (node->valueint == 1)
			{
				int pump_id = 0;
				node = cJSON_GetObjectItem(json, "pump_id");
				if (node == NULL)
				{
					printf("用户要查看的pump_id是空\n");
					exit(-1);
				}
				if (node->type == cJSON_Number)
				{
					// 获取具体的水泵ID
					pump_id = node->valueint;
				}
				printf("用户要查看的pump_id是%d\n", pump_id);
				// 把水泵号给到函数
				new_data_list(listenfd, pump_id);
			}
			// 查询历史数据
			else if (node->valueint == 2)
			{
				int pump_id = 0;
				node = cJSON_GetObjectItem(json, "pump_id");
				if (node == NULL)
				{
					printf("用户要查看的pump_id是空\n");
					exit(-1);
				}
				if (node->type == cJSON_Number)
				{
					// 获取具体的水泵ID
					pump_id = node->valueint;
				}
				printf("用户要查看的pump_id是%d\n", pump_id);
				// 调用查询历史数据的函数
				all_data_list(listenfd, pump_id);
			}
		}
	}
	else
	{
		printf("用户进入功能界面失败\n");
	}
}
